Recursive Trigger এবং Trigger Best Practices

Computer Programming - এপেক্স (Apex) Apex ট্রিগারস (Apex Triggers) |
296
296

Recursive Trigger হলো এমন Trigger যা নিজেই পুনরায় কল হতে পারে, অর্থাৎ এক Trigger অন্য Trigger কে চালু করে এবং এর ফলে একটি লুপ বা পুনরাবৃত্তি তৈরি হয়। Recursive Trigger সাধারণত ডেটাবেজের ওপর অতিরিক্ত লোড তৈরি করে এবং গভর্নর লিমিট অতিক্রম করতে পারে, ফলে এটি Salesforce সিস্টেমে সমস্যা সৃষ্টি করতে পারে। তাই Recursive Trigger এড়ানো এবং ভালো কোডিং প্র্যাকটিস অনুসরণ করা জরুরি।

Recursive Trigger এড়ানোর পদ্ধতি

Recursive Trigger এড়ানোর জন্য কিছু সাধারণ পদ্ধতি অনুসরণ করা যেতে পারে:

Static Boolean Flag ব্যবহার: Static Boolean ফ্ল্যাগ ব্যবহার করে Recursive Trigger এড়ানো যায়। একটি স্ট্যাটিক ভ্যারিয়েবল তৈরি করে প্রথমবার Trigger কল হওয়ার সময় সেটিকে true সেট করা হয় এবং পরবর্তীতে Trigger চালু হলে সেটি false চেক করা হয়।

উদাহরণ:

এখানে, TriggerHandler ক্লাসে একটি Static Boolean ফ্ল্যাগ isExecuted ব্যবহার করা হয়েছে যা false চেক করার মাধ্যমে Trigger একবার চালানোর পর সেটিকে true করে। পরবর্তীতে Trigger চালু হলে এটি true চেক করবে এবং Recursive Trigger এড়ানো হবে।

public class TriggerHandler {
    public static Boolean isExecuted = false;
}

trigger PreventRecursive on Account (before update) {
    if (!TriggerHandler.isExecuted) {
        TriggerHandler.isExecuted = true;
        // Trigger Logic
        System.debug('Trigger executed only once.');
    }
}

Trigger Context Variables ব্যবহার: Trigger Context Variables, যেমন Trigger.isInsert, Trigger.isUpdate, ইত্যাদি ব্যবহার করে Trigger-এর ইভেন্ট অনুযায়ী কোডের কার্যক্রম সীমিত করা যায়। এটি অতিরিক্ত Recursive Trigger এড়াতে সহায়ক।

Handler Class ব্যবহার: Trigger Handler Pattern ব্যবহার করে Trigger কোড সেপারেট ক্লাসে স্থানান্তর করা হয়, যা ট্রিগারের কার্যক্রম নিয়ন্ত্রণে রাখে এবং Recursive Trigger এড়াতে সাহায্য করে।


Trigger Best Practices

Trigger কার্যকরী এবং ইফেক্টিভভাবে লিখতে কিছু Best Practices অনুসরণ করা উচিত:

Trigger Handler Class ব্যবহার: Trigger Handler ক্লাস ব্যবহার করে Trigger-এর লজিক পৃথক ক্লাসে রাখা উচিত। এতে কোডের রক্ষণাবেক্ষণ সহজ হয় এবং লজিক পুনরায় ব্যবহার করা যায়।

উদাহরণ:

trigger AccountTrigger on Account (before insert, after update) {
    AccountTriggerHandler.handleTrigger(Trigger.new, Trigger.oldMap);
}

public class AccountTriggerHandler {
    public static void handleTrigger(List<Account> newList, Map<Id, Account> oldMap) {
        // Trigger Logic
    }
}

Single Trigger per Object নীতি অনুসরণ করা: একটি অবজেক্টের জন্য একটি মাত্র Trigger রাখা ভালো। এটি সহজ এবং সুগঠিত কোড লেখায় সাহায্য করে।

Context-Specific Logic ব্যবহার: Trigger Context Variables (যেমন Trigger.isInsert, Trigger.isUpdate) ব্যবহার করে কোডের কার্যক্ষমতা বাড়ানো যায়। Trigger-এর জন্য নির্দিষ্ট লজিক অনুযায়ী আলাদা ব্লক তৈরি করা উচিত।

Bulkification: Trigger সবসময় Bulk করতে হবে, অর্থাৎ এটি ২০০ রেকর্ড পর্যন্ত হ্যান্ডেল করতে সক্ষম হওয়া উচিত। তাই SOQL, DML, এবং লুপগুলি Bulkified হতে হবে। একক রেকর্ডে কাজ না করে for লুপ ব্যবহার করে তালিকায় কাজ করা উচিত।

Bulkification উদাহরণ:

trigger AccountTrigger on Account (after insert) {
    List<Contact> contacts = new List<Contact>();
    for (Account acc : Trigger.new) {
        contacts.add(new Contact(LastName = acc.Name, AccountId = acc.Id));
    }
    if (!contacts.isEmpty()) {
        insert contacts;
    }
}

Avoid Hardcoding Ids: কোনো ফিল্ড বা রেকর্ডের Id হার্ডকোড করা উচিত নয়, কারণ এটি সহজে পরিবর্তনযোগ্য নয় এবং মোডিফিকেশনে সমস্যা হতে পারে। এটির পরিবর্তে Custom Settings বা Custom Metadata ব্যবহার করা উচিত।

Avoid Recursive Trigger: Recursive Trigger এড়াতে Static Boolean Flag বা Trigger Context ব্যবহার করা উচিত।

Trigger Logic Minimization: Trigger-এ বড় লজিক না রেখে Handler ক্লাস ব্যবহার করা উচিত। Trigger শুধুমাত্র প্রাথমিক কাজ সম্পন্ন করবে এবং বড় লজিক আলাদা ক্লাসে রাখা হবে।

Trigger Unit Testing: Trigger Unit Test লিখা জরুরি। Test Class ব্যবহার করে ট্রিগার কার্যক্ষমতা যাচাই করতে হবে এবং সকল লজিক কভার করতে হবে। এর জন্য Insert, Update, Delete ইভেন্টের জন্য Test Class তৈরি করা উচিত।

Order of Execution বুঝে লেখা: Salesforce Trigger-এর অর্ডার অফ এক্সিকিউশন অনুযায়ী কাজ করে। তাই Before ও After Trigger কোনটা আগে ও পরে কাজ করবে তা মাথায় রেখে কোড লিখা উচিত।

SOQL Query and DML Limits মেনে চলা: Trigger-এ SOQL কুয়েরি এবং DML অপারেশনের সংখ্যা সীমিত রাখা উচিত, যাতে গভর্নর লিমিট না ছাড়িয়ে যায়।


সংক্ষেপে Trigger Best Practices

  1. Handler Class ব্যবহার করুন।
  2. Single Trigger per Object নীতি অনুসরণ করুন।
  3. Bulkification নিশ্চিত করুন।
  4. Hardcoded Ids এড়িয়ে চলুন।
  5. Recursive Trigger এড়ানোর জন্য Static Boolean Flags ব্যবহার করুন।
  6. Unit Testing-এর মাধ্যমে Trigger যাচাই করুন।
  7. Trigger Logic Minimization নিশ্চিত করুন।
  8. Order of Execution বুঝে কোড লিখুন।

Trigger Best Practices অনুসরণ করে Trigger কোডের কার্যকারিতা এবং পুনঃব্যবহারযোগ্যতা বাড়ানো যায় এবং গভর্নর লিমিট সমস্যা এড়ানো সম্ভব হয়।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion